<!DOCTYPE html>
<html lang="zh-CN">
    <head>
        <meta charset="UTF-8" />
        <title>11_闭包-内容梳理</title>
    </head>
    <body>
        <script>
            // (1) 什么是闭包?
            //     所谓的闭包是一种引用关系，该引用关系存在于内部函数中，引用的是外部函数的局部变量的对象
            
            // (2) 闭包的产生条件
            //     a.在外部函数内 定义一个内部函数
            //     b.内部函数中引用外部函数的局部变量
            //     c.外部函数返回内部函数的函数体
            //     d.内部函数和外部函数都要调用

            // (3) 闭包的基本写法
            //     a.
                //    function f1(){
                //         var a = 1;
                //         function f2(){
                //             a++;
                //             console.log(a);
                //         }
                //         return f2;
                //    }
                //    var result = f1();
                //    result();

            //     b.
                //    function f1(){
                //         var a = 1;
                //       return function(){
                //           a++;
                //           console.log(a);
                //       };
                //    }
                //    var result = f1();
                //    result(); 

            // (4) 闭包的作用
            //     a.延长了外部函数的局部变量的生命周期
            //     b.在函数外部访问内部函数的局部变量

            // (5) 闭包的坑点
            //     闭包不会在执行完毕就立即删除   所以会导致内存泄漏 进而导致内存溢出
            //     所以需要将闭包的值设置为null
        </script>
    </body>
</html>